/**
 * 2019-04-23 23:40:17
 */
package com.cdxy.config.mybatis;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * Esion
 */
@Configuration
public class MybatisPlusConfig {
    /**
     * 分页插件
     */
//    @Bean
//    public PaginationInterceptor paginationInterceptor() {
//        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//        paginationInterceptor.setLocalPage(true);// 开启 PageHelper 的支持
//        /*
//         * 【测试多租户】 SQL 解析处理拦截器<br>
//         * 这里固定写成住户 1 实际情况你可以从cookie读取，因此数据看不到 【 麻花藤 】 这条记录（ 注意观察 SQL ）<br>
//         */
//        List<ISqlParser> sqlParserList = new ArrayList<>();
//        TenantSqlParser tenantSqlParser = new TenantSqlParser();
//        tenantSqlParser.setTenantHandler(new TenantHandler() {
//            @Override
//            public Expression getTenantId() {
//                Long tenantId = ShiroUtil.getSysUser().getTenantId();
//                return new LongValue(tenantId);
//            }
//
//            @Override
//            public String getTenantIdColumn() {
//                return "tenant_id";
//            }
//
//            @Override
//            public boolean doTableFilter(String tableName) {
//                // 这里可以判断是否过滤表
//                if ("sys_permission".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_organization".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_sign".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_sign_attach".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_sign_contact".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_message".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_transfer".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_rotation".equals(tableName)) {
//                    return true;
//                }
//                if ("hz_day".equals(tableName)) {
//                    return true;
//                }
//                if("hz_week".equals(tableName)){
//                     return true;
//                }
//                if("hz_month".equals(tableName)){
//                    return true;
//                }
//                if ("hz_patient_contact".equals(tableName)) {
//                    return true;
//                }
//                if("hz_diagnose_record".equals(tableName)){
//                    return true;
//                }
//                return false;
//            }
//        });
//        sqlParserList.add(tenantSqlParser);
//        paginationInterceptor.setSqlParserList(sqlParserList);
////        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
////            @Override
////            public boolean doFilter(MetaObject metaObject) {
////                MappedStatement ms = PluginUtils.getMappedStatement(metaObject);
////                // 过滤自定义查询此时无租户信息约束【 麻花藤 】出现
////                if ("com.cdxy.dmr.mapper.system.SysUserMapper.selectUserOrgByEmailOrPhone".equals(ms.getId())) {
////                    return true;
////                }
////                return false;
////            }
////        });
//        return paginationInterceptor;
//
////        return new PaginationInterceptor();
//    }

    /**
     * （开发环境使用）
     * 性能分析拦截器，不建议生产使用
     * 用来观察 SQL 执行情况及执行时长
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作， true调回到首页，false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量，默认 500 条，-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
//        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

}
